草庐IT

Lua 垃圾回收

全部标签

c# - 是否可以停止 .NET 垃圾收集?

程序员是否可以在C#编程语言中以编程方式启动/停止垃圾回收?比如为了性能优化等等。 最佳答案 从.NET4.6开始,在GCclass中有方法是可能的:GC.TryStartNoGCRegion(...)和GC.EndNoGCRegion()。 关于c#-是否可以停止.NET垃圾收集?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/3074434/

c# - 为什么我们需要在某些对象上使用 Dispose() 方法?为什么垃圾收集器不做这项工作?

问题是:为什么我们需要在某些对象上调用Dispose()?为什么垃圾收集器在超出范围时不收集对象?我试图理解为什么它是这样实现的。我的意思是,如果在垃圾收集器收集超出范围的对象时调用Dispose()会不会更容易。 最佳答案 垃圾收集器是不确定的-它会在对象不再被引用后某个时间点收集对象,但不能保证及时发生。与引用计数相比,这有很多好处,包括允许循环依赖和不在所有地方递增和递减计数器的性能优势。但是,这确实意味着对于应该及时清理的资源(例如数据库连接、文件句柄等-几乎所有内存以外的资源),您仍然需要显式处理资源。using语句使这变

C# - 垃圾回收

好的,我了解了栈和堆(值存在于栈中,引用存在于堆中)。当我声明一个类的新实例时,它位于堆上,并在堆栈上引用内存中的这一点。我也知道C#有它自己的垃圾收集器(即它确定实例化类何时不再使用并回收内存)。我有两个问题:我对垃圾收集的理解是否正确?我可以自己做吗?如果是的话,我自己这样做有什么真正的好处,还是我应该放弃它。我问是因为我在For循环中有一个方法。每次我经历一个循环时,我都会创建我的类的一个新实例。在我的脑海中,我想象所有这些类都堆成一堆,除了占用内存之外什么都不做,我想尽快摆脱它们以保持整洁!我理解正确还是我遗漏了什么? 最佳答案

c# - 如何使用 C# 从回收站恢复文件?

将文件移动到回收站和清空回收站都有详细记录,但如何以编程方式从回收站恢复文件? 最佳答案 在纯C#中似乎没有解决方案。您很可能不得不求助于P/Invoke。Thisarticle使用SHFileOperation在C++中提供解决方案API。 关于c#-如何使用C#从回收站恢复文件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/911391/

c# - 在 Mono 中触发垃圾回收

如何让Mono中的垃圾收集器做任何有用的事情?这篇文章的底部是一个生成两个大字符串的简单C#测试程序。生成第一个字符串后,取消引用变量,退出作用域,并手动触发垃圾收集器。尽管如此,使用的内存并没有减少,并且在构造第二个字符串期间程序因内存不足异常而爆炸。UnhandledException:OutOfMemoryException[ERROR]FATALUNHANDLEDEXCEPTION:System.OutOfMemoryException:Outofmemoryat(wrappermanaged-to-native)string:InternalAllocateStr(int)a

c# - 垃圾回收是如何收集自引用对象的?

如果某个对象未被任何其他对象引用,则它会被.NETCLR垃圾收集器收集。但是,如果objA引用objB,objB引用objC,而objC对objA的引用,垃圾收集器如何确定它们(作为一个整体)可以被收集? 最佳答案 CLR使用一种称为标记清除的技术。作为这项技术的一部分,每个对象都可以被认为是最初标记为收集的。然后,CLR遍历每个可访问对象,从您的全局变量(静态字段等)作为根开始,并清除每个可遍历对象上的标记。然后它会扫除剩余的标记对象。请记住,此“标记”是概念性的;实际上,对象很可能被添加到一个集合集中。在循环自引用对象的情况下,

c# - 我怎么知道一个目录是C#中的回收站?

给定一个文件夹,我如何判断它是一个回收站?我找到了一个answer适用于C++但不适用于C#。我的第一个想法是检查FileAttributes.System(在我的情况下这是一个可接受的近似值),但实际上该标志在回收文件夹中被清除。使用硬编码文件夹名称的原始解决方案是不可能的(我们毕竟是2009年)。 最佳答案 这里有个小问题。Windows回收站是一个虚拟文件夹,实际上并不存在。您看到的文件实际上并不在该文件夹中,它们是磁盘上已重命名为特殊名称的现有文件的表示,这会将它们从可见文件系统中“删除”,但不会从物理文件系统中删除。您可以

c# - 如何将文件移动到回收站

我需要在.net2003中将文件移动到回收站我从refrence添加了microsft.visualbasic.runtimedll,但我无法获取filesystem.deletedirectory,那该怎么办..任何人都可以帮助我吗? 最佳答案 我找到了这个,不知道它是否有效,但值得一试。usingMicrosoft.VisualBasic;stringpath=@"c:\myfile.txt";FileIO.FileSystem.DeleteDirectory(path,FileIO.UIOption.OnlyErrorDial

c# - 这些对象中的哪些符合垃圾收集条件?

这是我最近在面试中被问到的一个问题:在“GC.Collect()”调用期间会收集哪些“随机”对象?Stringa=newRandom().Next(0,1)==1?"Whatever1":"Whatever2";Stringb=newWeakReference(newRandom()).Target.Next(0,1)==1?"Whatever1":"Whatever2";GC.Collect();我回答说这是一个特定于实现的问题,它高度依赖于GC实现和相应的弱引用语义。据我所知,C#规范没有提供关于GC.Collect应该做什么以及应该如何处理弱引用的确切描述。但是,我的面试官想听点

c# - 垃圾回收应该已经删除了对象,但 WeakReference.IsAlive 仍然返回 true

我有一个我希望通过的测试,但是垃圾收集器的行为并不像我想象的那样:[Test]publicvoidWeakReferenceTest2(){varobj=newobject();varwRef=newWeakReference(obj);wRef.IsAlive.Should().BeTrue();//passesGC.Collect();wRef.IsAlive.Should().BeTrue();//passesobj=null;GC.Collect();wRef.IsAlive.Should().BeFalse();//fails}在这个例子中,obj对象应该被GC,因此我希望W